package com.fzg.common.demo.hutool;

import cn.hutool.core.date.*;
import lombok.extern.slf4j.Slf4j;

import java.util.Calendar;

/**
 * create by fzg
 * 2022/12/6 13:33
 */

@Slf4j
public class demo03 {
    public static void main(String[] args) {

        // 当前时间
        DateTime date = DateUtil.date();
        // 2022-12-06 13:36:26
        log.info(date.toString());
        // 2022-12-06
        log.info(date.toDateStr());

        // 当前时间
        DateTime date1 = DateUtil.date(Calendar.getInstance());
        // 2022-12-06 13:38:04
        log.info(date1.toString());

        // 当前时间
        DateTime date2 = DateUtil.date(System.currentTimeMillis());
        // 2022-12-06 13:39:03
        log.info(date2.toString());

        // 当前时间：格式 yyyy-MM-dd HH:mm:ss
        String now = DateUtil.now();
        // 2022-12-06 13:40:18
        log.info(now);

        // 当前时间 格式：yyyy-MM-dd
        String today = DateUtil.today();
        // 2022-12-06
        log.info(today);

        // parse方法自动识别一些常见的日期格式
        DateTime time = DateUtil.parse("2022-11-11 3:2:3");
        // 2022-11-11 03:02:03
        log.info(time.toString());

        DateTime time1 = DateUtil.parse("2022年12月6日 14时23分59秒");
        // 2022-12-06 14:23:59
        log.info(time1.toString());

        // 自定义日期格式：* $
        DateTime time2 = DateUtil.parse("2022*12*8 23$4$30", "yyyy*MM*dd HH$mm$ss");
        // 2022-12-08 23:04:30
        log.info(time2.toString());

        // 格式化日期输出
        String datef = DateUtil.format(DateUtil.date(), "yyyy年MM月dd日");
        // 2022年12月06日
        log.info(datef);

        DateTime date3 = DateUtil.date();
        int year = DateUtil.year(date3);
        // 2022年
        log.info(year + "年");
        // 这里的月份是从0开始的，所以如果现在真实的是12月，那么month = 11
        int month = DateUtil.month(date3);
        // 12月
        log.info(month + 1 + "月");
        // 返回的是月份的英文大写（枚举）
        Month month1 = DateUtil.monthEnum(date3);
        // DECEMBER
        log.info(month1.toString());


        /*
          日期偏移
         */
        DateTime date4 = DateUtil.parse("2022-12-09 12:00:00");
        // 加一天
        DateTime date5 = DateUtil.offset(date4, DateField.DAY_OF_MONTH, 1);
        // 2022-12-10 12:00:00
        log.info(date5.toString());
        // 加一年
        DateTime date6 = DateUtil.offset(date4, DateField.YEAR, 1);
        // 2023-12-09 12:00:00
        log.info(date6.toString());
        // 加一个星期
        DateTime date7 = DateUtil.offset(date4, DateField.WEEK_OF_MONTH, 1);
        // 2022-12-16 12:00:00
        log.info(date7.toString());
        // 加一个星期 与DateField.WEEK_OF_MONTH一样
        DateTime date8 = DateUtil.offset(date4, DateField.WEEK_OF_YEAR, 1);
        // 2022-12-16 12:00:00
        log.info(date8.toString());

        String now1 = DateUtil.now();
        log.info(now1);
        // 昨天
        DateTime date9 = DateUtil.yesterday();
        log.info(date9.toString());
        // 明天
        DateTime date10 = DateUtil.tomorrow();
        log.info(date10.toString());
        // 上周
        DateTime date11 = DateUtil.lastWeek();
        log.info(date11.toString());
        // 下周
        DateTime date12 = DateUtil.nextWeek();
        log.info(date12.toString());
        // 上个月
        DateTime date13 = DateUtil.lastMonth();
        log.info(date13.toString());
        // 下个月
        DateTime date14 = DateUtil.nextMonth();
        log.info(date14.toString());


        /*
          计算两个日期之间的时间差
          between方法
         */
        DateTime date15 = DateUtil.parse("2022-11-20 21:12:00");
        DateTime date16 = DateUtil.parse("2022-11-20 00:00:00");
        long day = DateUtil.between(date15, date16, DateUnit.DAY);
        long hour = DateUtil.between(date15, date16, DateUnit.HOUR);
        long minute = DateUtil.between(date15, date16, DateUnit.MINUTE);
        long second = DateUtil.between(date15, date16, DateUnit.SECOND);
        long millisecond = second * 1000;
        log.info(day + "天");
        log.info("相差" + hour + "个小时");
        log.info("相差" + minute + "分钟");
        log.info("相差" + second + "秒");
        log.info("相差" + millisecond + "毫秒");
        String day1 = DateUtil.formatBetween(date15, date16, BetweenFormatter.Level.DAY);
        // 会在后面加个字符串 “天”
        log.info(day1);
        String hour1 = DateUtil.formatBetween(date15, date16, BetweenFormatter.Level.HOUR);
        // 会在后面加个字符串 “小时”
        log.info(hour1);
        String minute1 = DateUtil.formatBetween(millisecond, BetweenFormatter.Level.MINUTE);
        // 21小时12分
        log.info(minute1);

        /*
          根据你的生日计算
          星座
          属相
         */
        String birthday = "1998-11-29 4:30:00";
        DateTime date17 = DateUtil.parse(birthday);
        int month2 = DateUtil.month(date17);
        int realMonth = month2 + 1;
        log.info(realMonth + "月");
        int day2 = DateUtil.dayOfMonth(date17);
        log.info(day2 + "天");
        // 星座
        String constellation = DateUtil.getZodiac(realMonth, day2);
        log.info("我是" + constellation);
        // 属相
        String ChineseZodiac = DateUtil.getChineseZodiac(DateUtil.year(date17));
        log.info("我属" + ChineseZodiac);
        // 年龄
        int age = DateUtil.ageOfNow(birthday);
        log.info(age + "岁了");
        // 判断今年是否是闰年
        boolean leapYear = DateUtil.isLeapYear(DateUtil.year(DateUtil.date()));
        log.info("今年" + (leapYear ? "是" : "不是") + "闰年");
    }
}
